package com.example.d9_homework.homework10;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

/**
 * 版本2
 */
public class Test2 {
    public static void main(String[] args) {
        // 1. 将以下车站对应关系的数据存储到map集合中,key：表示站编号,value：表示站名,并遍历打印(可以不按顺序打印)：
        // 2. 计算地铁票价规则：
        // 总行程 3站内（包含3站）收费3元,3站以上但不超过5站（包含5站）的收费4元,5站以上的,在4元的基础上,每多1站增加2元,10元封顶；
        // 3. 需要对键盘录入的上车站和到达站进行判断,如果没有该站,提示重新输入,直到站名存在为止,每站需要2分钟.

        // 调用一个方法获取站点信息
        Map<Integer, String> stations = getStationsInfo();

        // 打印站点信息
        printStationsInfo(stations);

        Scanner sc = new Scanner(System.in);
        System.out.println("\n请输入出发站编号:");
        int startStation = sc.nextInt();
        System.out.println("请输入到达站编号:");
        int endStation = sc.nextInt();
        // 计算票价
        int fare = calculateFare(stations, startStation, endStation);
        if (fare == -1) {
            System.out.println("输入的站点不存在,请重新输入");
        }
        System.out.println("您的票价是:" + fare);
    }

    /**
     * 计算票价
     *
     * @param stations     站点信息集合
     * @param startStation 起始站点编号
     * @param endStation   终点站点编号
     * @return 返回票价
     */
    public static int calculateFare(Map<Integer, String> stations, int startStation, int endStation) {
        // 1.首先先进行判断站点是否存在
        boolean flag = getStations(stations, startStation, endStation);
        if (!flag) {
            return -1;
        }

        // 2.开始计算票价
        int distance = Math.abs(endStation - startStation);
        // 计算票价
        int fare = 0;
        if (distance <= 3) {
            fare = 3;
        } else if (distance <= 5) {
            fare = 4;
        } else {
            fare = 4 + (distance - 5) * 2;
            if (fare > 10) {
                fare = 10;
            }
        }
        return fare;
    }

    /**
     * 判断站点是否存在
     *
     * @param stations     站点信息集合
     * @param startStation 起始站点编号
     * @param endStation   终点站点编号
     * @return 返回true说明站点存在, 返回false说明站点不存在
     */
    private static boolean getStations(Map<Integer, String> stations, int startStation, int endStation) {
        // 遍历站点集合
        while (true) {
            if (!stations.containsKey(startStation) && stations.containsKey(endStation)) {
                System.out.println("您输入的起始站点或终点站不存在");
                return false;
            }
            return true;
        }
    }

    /**
     * 打印站点信息
     *
     * @param stations 站点信息集合
     */
    public static void printStationsInfo(Map<Integer, String> stations) {
        // 获取所有的key
        Set<Integer> keys = stations.keySet();
        int count = 0;
        // 遍历所有的key
        for (Integer key : keys) {
            // 获取key对应的value
            System.out.print(key + "--" + stations.get(key) + "\t");
            count++;
            // 每5个换行
            if (count % 5 == 0) {
                System.out.println();
            }
        }
    }

    /**
     * 获取站点信息
     *
     * @return 返回存储站点信息的集合
     */
    public static Map<Integer, String> getStationsInfo() {
        Map<Integer, String> stations = new HashMap<>();
        stations.put(1, "黄花机场T1T2");
        stations.put(2, "木马坝");
        stations.put(3, "大路村");
        stations.put(4, "龙峰");
        stations.put(5, "曹家坪");
        stations.put(6, "檀木桥");
        stations.put(7, "龙华");
        stations.put(8, "韶光");
        stations.put(9, "东湖");
        stations.put(10, "农科院农大");
        stations.put(11, "隆平水稻博物馆");
        stations.put(12, "花桥");
        stations.put(13, "人民东路");
        stations.put(14, "芙蓉区政府");
        stations.put(15, "朝阳村");
        stations.put(16, "窑岭湘雅二医院");
        stations.put(17, "迎宾路口");
        stations.put(18, "烈士公园南");
        stations.put(19, "湘雅医院");
        stations.put(20, "文昌阁");
        stations.put(21, "六沟垅");
        stations.put(22, "湘雅三医院");
        stations.put(23, "白鸽咀");
        stations.put(24, "湖南工商大学");
        stations.put(25, "涧塘");
        stations.put(26, "麓谷公园");
        stations.put(27, "麓谷体育公园");
        stations.put(28, "长丰");
        stations.put(29, "和馨园");
        stations.put(30, "长庆");
        stations.put(31, "一师范西校区");
        stations.put(32, "中塘");
        stations.put(33, "象鼻窝");
        stations.put(34, "谢家桥");
        return stations;
    }
}